package ejb.casacentral.persistence.entity;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;

@Entity
@Table
@NamedQueries({
	@NamedQuery(name ="Remito.todas",query="select s from Remito s "),
	@NamedQuery(name ="Remito.porCodigo",query="select s from Remito s where s.codigo = :codigo"),
	@NamedQuery(name ="Remito.porCodigos",query="select s from Remito s where s.codigo in (:codigos)")
})
public class Remito implements Serializable{
	
	
	/**
	 * 
	 */
	private static final long serialVersionUID = -8219721667272857255L;
	@Id
	@GeneratedValue(strategy=GenerationType.AUTO)
	private Long codigo;
	@OneToMany
	@JoinColumn(name="idRemito",referencedColumnName="codigo")
	private List<ItemRodamiento> rodamientos;
	@Column
	private Date fechaEmision;
	@OneToMany
	@JoinColumn(name="idRemito",referencedColumnName="codigo")
	private List<SolicitudCompra> solicitudes = new ArrayList<SolicitudCompra>();
	@ManyToOne
	private OficinaVenta oficinaVenta;
	
	
	
	
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((codigo == null) ? 0 : codigo.hashCode());
		result = prime * result
				+ ((fechaEmision == null) ? 0 : fechaEmision.hashCode());
		result = prime * result
				+ ((oficinaVenta == null) ? 0 : oficinaVenta.hashCode());
		result = prime * result
				+ ((rodamientos == null) ? 0 : rodamientos.hashCode());
		result = prime * result
				+ ((solicitudes == null) ? 0 : solicitudes.hashCode());
		return result;
	}
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Remito other = (Remito) obj;
		if (codigo == null) {
			if (other.codigo != null)
				return false;
		} else if (!codigo.equals(other.codigo))
			return false;
		if (fechaEmision == null) {
			if (other.fechaEmision != null)
				return false;
		} else if (!fechaEmision.equals(other.fechaEmision))
			return false;
		if (oficinaVenta == null) {
			if (other.oficinaVenta != null)
				return false;
		} else if (!oficinaVenta.equals(other.oficinaVenta))
			return false;
		if (rodamientos == null) {
			if (other.rodamientos != null)
				return false;
		} else if (!rodamientos.equals(other.rodamientos))
			return false;
		if (solicitudes == null) {
			if (other.solicitudes != null)
				return false;
		} else if (!solicitudes.equals(other.solicitudes))
			return false;
		return true;
	}
	public Long getCodigo() {
		return codigo;
	}
	public void setCodigo(Long codigo) {
		this.codigo = codigo;
	}
	public List<ItemRodamiento> getRodamientos() {
		return rodamientos;
	}
	public void setRodamientos(List<ItemRodamiento> rodamientos) {
		this.rodamientos = rodamientos;
	}
	public Date getFechaEmision() {
		return fechaEmision;
	}
	public void setFechaEmision(Date fechaEmision) {
		this.fechaEmision = fechaEmision;
	}
	public List<SolicitudCompra> getSolicitudes() {
		return solicitudes;
	}
	public void setSolicitudes(List<SolicitudCompra> solicitudes) {
		this.solicitudes = solicitudes;
	}
	public OficinaVenta getOficinaVenta() {
		return oficinaVenta;
	}
	public void setOficinaVenta(OficinaVenta oficinaVenta) {
		this.oficinaVenta = oficinaVenta;
	}
	@Override
	public String toString() {
		return "Remito [codigo=" + codigo + ", rodamientos=" + rodamientos
				+ ", fechaEmision=" + fechaEmision + ", solicitudes="
				+ solicitudes + ", oficinaVenta=" + oficinaVenta + "]";
	}
	public Remito() {
		super();
	}
	public Remito(Long codigo, List<ItemRodamiento> rodamientos,
			Date fechaEmision, List<SolicitudCompra> solicitudes,
			OficinaVenta oficinaVenta) {
		super();
		this.codigo = codigo;
		this.rodamientos = rodamientos;
		this.fechaEmision = fechaEmision;
		this.solicitudes = solicitudes;
		this.oficinaVenta = oficinaVenta;
	}
	
	public void addRomdamietos(List<ItemRodamiento> rodamientos2) {
		if(this.rodamientos==null)
			rodamientos = new ArrayList<ItemRodamiento>();
		rodamientos.addAll(rodamientos2);
		
	}
	public void addSolicitud(SolicitudCompra solicitud) {
		if(solicitudes==null)
			solicitudes = new ArrayList<SolicitudCompra>();
		solicitudes.add(solicitud);
		
	}
	
	
	

}
